package com.ds.bintree.LeetCode;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @author Dianzhi Han
 * @version 1.0
 * @description: 迭代解法
 * @date 2022/9/13 0:42
 */
public class Num101_IsSymmetric2 {
    public boolean isSymmetric(TreeNode root) {
        if (root==null){
            return true;
        }
        if (root.left==null && root.right ==null){
            return true;
        }
        if (root.left==null || root.right==null){
            return false;
        }
//        剩下的情况是左右子树都不为空
        Deque<TreeNode> queue = new LinkedList<>();
        queue.offer(root.left);
        queue.offer(root.right);
        while (!queue.isEmpty()){
            TreeNode t1=queue.poll();
            TreeNode t2=queue.poll();
            if (t1==null&&t2==null){
                continue;
            }
            if (t1==null || t2 ==null){
                return false;
            }
//            每次出队两个元素判断值是否相等,但因为有.val,所以在此之前要注意空指针异常(有可能出队空指针)
            if (t1.val!= t2.val){
                return false;
            }
            queue.offer(t1.left);
            queue.offer(t2.right);
            queue.offer(t1.right);
            queue.offer(t2.left);
        }
        return true;
    }
}
